iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 26

Day26_ABAP RESTful API架構(上)_建立資料表

  • 分享至 

  • xImage
  •  

原文連結:Introducing the Programming Model

在這個章節中,將介紹ABAP中如使用RESTful API,提供程式增刪改查及驗證等功能的介面。
這張將透過建立一個OData UI 應用程式來學習,該程式提供了更改航班價格的服務。

建立資料表格

1. 新建資料表

在ADT中,File > New > Other尋找要新增的物件,在欄位中搜尋database table並按下一步。
https://ithelp.ithome.com.tw/upload/images/20240919/20113802xPdDvbMWyu.png

2.資料表命名

填入表格名稱並賦值給一個package,在命名時,自定義表格須以Z開頭;A開頭則是active table,為儲存資料時存放的表格;D開頭則為草稿資料,存放不完整的資料等待以後再處理。命名完成,點擊Next
https://ithelp.ithome.com.tw/upload/images/20240919/20113802r1aQvS56F8.png

3. transport request設定

選擇合適的request並按下Finish
https://ithelp.ithome.com.tw/upload/images/20240919/20113802llYF8JjFCx.png

4. 添加表格欄位

在表格定義中,為每一列指定名稱與資料型別,在大括號中用<欄位名稱>:<資料型別>的方式來定義欄位。型別上可以使用基礎的內建型別,如果資料型別的定義不完整,需要在型別後的括號中提供欄位長度,例如abap.char(10)abap.dec(15,2)

如下例,欄位的型別也使用data element,稍後會提及。

@EndUserText.label: 'Flight Connections'
@AbapCatalog.enhancement.category #NOT_EXTENSIBLE
@AbapCatalog.tableCategory: #TRANSPARENT
@AbapCatalog.deliveryClass: #A
@AbapCatalog.dataMaintenance #RESTRICTED

define table zs4d400aconn {
key client   : abap.clnt not null;
key uuid     : sysuuid_x16 not null;

carrid       : /dmo/carrier_id;
connid       : /dmo/connection_id; 
airport_from : /dmo/airport_from_id;
city_from    : /dmo/city;
country_from : land1;
airport_to   : /dmo/airport_to_id;
city_to      : /dmo/city; 
country_to   : land1;

"系統管理欄位"
local_created_by      : abp_creation_user;
local_created_at      : abp_creation_tstmpl;
local_last_changed_by : abp_locinst_lastchange_user; 
local_last_changed_at : abp_locinst_lastchange_tstmpl;
last_changed_at       : abp_lastchange_tstmpl;

}

建立data element

如果欄位不使用內建型別,亦可以使用data elementdata element是ABAP Dictionary物件中定義欄位的型別,例如id或者航班代碼等。Data element除了型別的技術定義,也包含了欄位標籤這類的語意資訊。如果用Data element來定義欄位型別,系統會在UI上自動使用欄位標籤。

如下圖,在設定Data element的視窗中,在airline的定義為長度為3的character。
https://ithelp.ithome.com.tw/upload/images/20240919/20113802TOdtA8p2gQ.png

1.建立data element
一樣從File > New > Other建立data element,選擇合適的request。
https://ithelp.ithome.com.tw/upload/images/20240919/20113802x1m0ca6mvz.pnghttps://ithelp.ithome.com.tw/upload/images/20240919/20113802QyRBNx9SqZ.pnghttps://ithelp.ithome.com.tw/upload/images/20240919/20113802pSBu7RcNVd.png
2.定義data element型別
https://ithelp.ithome.com.tw/upload/images/20240919/20113802bKBPC9T11m.png

接著指定data element的型別,在此復用既有的domain/DMO/CITY,domain視為記錄了長度與基礎型別(integer,char之類的)的技術型定義。注意,這種復用方式代表兩個data element都使用了同一個domain,變更該domain將會連帶變更所有使用它的data element。

輸入短、中、長的欄位標籤以及用於資料列標題的標籤,當建立Fiori app時,系統將自動套用標籤文字。

- primary key

"欄位定義開頭"
key client   : abap.clnt not null;
key uuid     : sysuuid_x16 not null;

每張自訂一的表格都需要帶有一個主鍵(primary key),並至於欄位定義的開頭,用來對每一筆資料進行唯一識別。

而表格中的第一個欄位,必須是client欄位,且資料型別必須為abap.clnt.。另外,本例用了UUID密鑰作為了唯一識別的欄位,當欄位型別為sysuuid_x16,建立新紀錄時會自動指派UUID。

系統管理欄位(administrative field)

local_created_by      : abp_creation_user;
local_created_at      : abp_creation_tstmpl;
local_last_changed_by : abp_locinst_lastchange_user; 
local_last_changed_at : abp_locinst_lastchange_tstmpl;
last_changed_at       : abp_lastchange_tstmpl;

如上例,為了讓表格的的操作紀錄可追溯,建議可以把相關管理紀錄跟資料一起存在表格,例如創建或更改資料的使用者,以及創建和最後更改的時間戳記等。

特別像是local_last_changed_at以及 last_changed_at這兩個欄位中在RESTful API中,可以用於並行處理的控制。

RESTful應用程式不存在狀態,僅透過排他性鎖定無法保正資料的一致性,在設置RESTful應用時應混合使用獨占性鎖定與ETag,避免資料不一致。

ETag欄位會隨著每次資料更新而變更值,可以透過比較ETag欄位來確保資料是否被變更,如最後變更的時間戳記就很適合拿來做為ETag。

https://ithelp.ithome.com.tw/upload/images/20240919/20113802ttkRh4jMef.png
如上圖,在ADT中按F3啟用資料表,系統也會創建實體表格。完成此步驟就可以開始為應用程式產生需要的額外物件。

註:這裡為了完成範例,有一個複製資料表/LRN/S4D400_APT的流程,發現搜不到該表。
後來發現需要購買官方訓練環境才有這張表......所以跳過此流程,後續操作截圖有部分將會直接用SAP learning裡的,詳見相關討論參考

明天接著介紹物件生成器!


上一篇
Day25_EML語法 & BO資料匯入、回傳與更新
下一篇
Day27_ABAP RESTful API架構(下)_物件生成器
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言